package es.cursojavaee.jaxws.biblioteca;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import javax.jws.WebService;

import com.sun.xml.ws.developer.SchemaValidation;

import es.cursojavaee.jaxws.biblioteca.model.Genero;
import es.cursojavaee.jaxws.biblioteca.model.Libro;
import es.cursojavaee.jaxws.biblioteca.model.Tipo;

@WebService(serviceName = "BibliotecaWebService",
        endpointInterface = "es.cursojavaee.jaxws.biblioteca.IBibliotecaWebService")
@SchemaValidation
public class BibliotecaWebService implements IBibliotecaWebService {

    private static long contador = 10l;
    private static final Map<Long, Libro> LIBROS = new HashMap<Long, Libro>();

    static {
        LIBROS.put(1l, new Libro(1l, "El señor de los anillos", Arrays.asList("J.R.R. Tolkien"), null, Tipo.NOVELA,
                Arrays.asList(Genero.AVENTURA, Genero.FANTASTICO)));
        LIBROS.put(2l, new Libro(2l, "Don Quijote de la Mancha", Arrays.asList("Miguel de Cervantes Saavedra"), null,
                Tipo.NOVELA, Arrays.asList(Genero.FANTASTICO)));
        LIBROS.put(
                3l,
                new Libro(3l, "La Ilíada", Arrays.asList("Homero"), null, Tipo.NOVELA, Arrays.asList(Genero.HISTORICA,
                        Genero.AVENTURA)));
        LIBROS.put(4l, new Libro(4l, "Matar a un ruiseñor", Arrays.asList("Nelle Harper Lee"), null, Tipo.NOVELA,
                Arrays.asList(Genero.HISTORICA)));
        LIBROS.put(5l, new Libro(5l, "Nacidos de la bruma", Arrays.asList("Brandon Sanderson"), null, Tipo.NOVELA,
                Arrays.asList(Genero.AVENTURA, Genero.FANTASTICO)));
        LIBROS.put(
                6l,
                new Libro(6l, "Un mundo feliz", Arrays.asList("Aldous Huxley"), null, Tipo.NOVELA, Arrays
                        .asList(Genero.CIENCIA_FICCION)));
    }

    @Override
    public Libro buscar(final Long id) {
        return LIBROS.get(id);
    }

    @Override
    public Libro alta(final Libro libro) {
        Libro result = null;
        if (libro != null) {
            libro.setId(contador++);
            LIBROS.put(libro.getId(), libro);
            result = libro;
        }
        return result;
    }

    @Override
    public void modifica(final Libro libro) {
        if (libro != null && LIBROS.containsKey(libro.getId())) {
            LIBROS.remove(libro.getId());
            LIBROS.put(libro.getId(), libro);
        }
    }

}
